package cn.openea.perpartner.evaluation.web.service;

import cn.openea.perpartner.evaluation.web.entity.EvaluationSignup;
import cn.openea.perpartner.evaluation.web.entity.EvaluationTask;

import java.text.ParseException;
import java.util.TimerTask;

/**
 * @author rains
 * @since 2023-07-07 14:29
 */
public interface ISendMsgService {

    /**
     * 给参与者发送提交成果通知
     * 两种情况：（1）正常提交成果；（2）返修
     * @param evaluationSignup
     * @return
     */
    TimerTask partnerSubmitResult(EvaluationSignup evaluationSignup);

    /**
     * 给发起人发送【用户参与】通知
     * @param evaluationTask
     * @param evaluationSignup
     * @return
     */
    TimerTask joinNotice(EvaluationTask evaluationTask, EvaluationSignup evaluationSignup);


    /**
     * 给验收人发送【验收成果】通知
     * 两种情况：（1）正常提交成果；（2）返修
     * @param evaluationSignup
     * @return
     */
    TimerTask inspectorAcceptResult(EvaluationSignup evaluationSignup);

    /**
     * 给参与者发送【任务回收】通知
     * @param evaluationSignup
     * @return
     */
    TimerTask recall(EvaluationSignup evaluationSignup);

    /**
     * 给参与者发送【验收通过】通知
     * @param evaluationSignup
     * @return
     */
    TimerTask pass(EvaluationSignup evaluationSignup, EvaluationTask evaluationTask);

    /**
     * 给参与者发送评级奖励通知（A级）
     * @param evaluationSignup
     * @param evaluationTask
     * @return
     */
    TimerTask reissueA(EvaluationSignup evaluationSignup, EvaluationTask evaluationTask);

    /**
     * 给参与者发送评级奖励通知（B级）
     * @param evaluationSignup
     * @param evaluationTask
     * @return
     */
    TimerTask reissueB(EvaluationSignup evaluationSignup, EvaluationTask evaluationTask);

    /**
     * 给参与者发送提醒提交成果通知
     * @param evaluationSignup
     * @param tag
     * @return
     */
    TimerTask reminder(EvaluationSignup evaluationSignup, String tag) throws ParseException;

    /**
     * 给参与者发送【超时任务回收】通知
     * @param evaluationSignup
     * @return
     */
    TimerTask timeoutRecall(EvaluationSignup evaluationSignup);

    /**
     * 给评级人员发送【评级】通知
     * @param evaluationTask
     * @return
     */
    TimerTask rating(EvaluationTask evaluationTask);

    /**
     * 给参与者发送【超时任务作废】通知
     * @param evaluationSignup
     * @return
     */
    TimerTask timeoutCancel(EvaluationSignup evaluationSignup);

    /**
     * 给参与者发送【回收名额】通知
     * @param evaluationSignup
     * @return
     */
    TimerTask recyclingQuota(EvaluationSignup evaluationSignup);

}
